package com.javakc.platform.modules.system.user.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.javakc.platform.modules.system.user.dao.UserDao;
import com.javakc.platform.modules.system.user.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * @author zhouhonggang
 * @version 1.0.0
 * @project springboot-development-platform
 * @datetime 2022-04-13 10:38
 * @description: [系统管理·用户逻辑]
 */
@Service
public class UserService extends ServiceImpl<UserDao, User> {
    /**
     * 用户分页查询
     * @param entity 实体
     * @return 分页对象
     */
    public Page<User> page(User entity)
    {
        //分页对象
        Page<User> userPage = Page.of(entity.getPageNo(), entity.getPageSize());
        //动态查询条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //账号精确查询
        if(StringUtils.hasLength(entity.getName()))
        {
            queryWrapper.eq("name", entity.getName());
        }
        //昵称模糊查询
        if(StringUtils.hasLength(entity.getNick()))
        {
            queryWrapper.like("nick", entity.getNick());
        }
        //启用禁用状态
        if(!ObjectUtils.isEmpty(entity.getLocked()))
        {
            queryWrapper.eq("locked", entity.getLocked());
        }
        //电话精确查询
        if(StringUtils.hasLength(entity.getPhone()))
        {
            queryWrapper.eq("phone", entity.getPhone());
        }
        //邮箱精确查询
        if(StringUtils.hasLength(entity.getEmail()))
        {
            queryWrapper.eq("email", entity.getEmail());
        }
        //出生日期查询
        if(!ObjectUtils.isEmpty(entity.getBirthday()))
        {
            queryWrapper.eq("birthday", entity.getBirthday());
            // String birthday = format.format(entity.getBirthday());
            // queryWrapper.apply(" date_format(birthday, '%Y-%m-%d') = '" + birthday + "'");
        }
        return baseMapper.selectPage(userPage, queryWrapper);
    }

    /**
     * 根据账号查询对象
     * @param username 登陆账号
     * @return 用户对象
     */
    public  User loadUserByUsername(String username){
//        封装user 泛型user
        QueryWrapper<User> wrapper=new QueryWrapper<>();
//       登陆查询结果为一条
        wrapper.eq("name",username);
        return baseMapper.selectOne(wrapper);
    }

    /**
     * 根据账号查询用户权限列表
     * @param username 登陆账号
     * @return 权限列表
     */
    public List<String> queryCodeByUsername(String username){
        return baseMapper.queryCodeByUsername(username);
    }
}
